STM32 HAL库I2C注意点

STM32 HAL库I2C注意点


现象


STM32CubeMX提供了串口的HAL库,I2C有时候会卡死

原因


固件bug,网上搜到有很多,ST官方也承认的

解决方法


发送接收设置超时,并在之前检测状态

在函数调用

1
2
HAL_I2C_Mem_Write()
HAL_I2C_Mem_Read()

时设置超时参数

并在每次执行前尝试复位

1
2
3
4
5
if ((__HAL_I2C_GET_FLAG(&hi2c2, I2C_FLAG_BUSY) ? SET : RESET) == SET) {
__HAL_RCC_I2C2_FORCE_RESET();
__HAL_RCC_I2C2_RELEASE_RESET();
MX_I2C2_Init();
}

不需要其它操作了

Комментарии

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×